<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>递归调用</title>
</head>
<body>
    
</body>
</html>
<script>
    //递归调用
    //函数递归调用是函数内部调用自身的方式
    //主要是用于不能确定数量的循环操作
    //一定要有退出的时机，否则会陷入死循环

    //阶乘
    //使用递归就记住两层    第一层是逻辑   第二层是 退出时机
    // function factorial(num = 3){
    //     if(num == 1){
    //         return 1;
    //     }
    //     return num * factorial(--num);
    //     //return 3*2*1
    //     //return 2*1
    //     //return 1
    // }
    // console.log(factorial(5));


    // function factorial(num = 3){
    //     return num == 1 ? num : num * factorial(--num);
    // }
    // console.log(factorial(5));

    //累加计算方法
    // function sum(...args){
    //     if(args.length == 0){
    //         return 0;
    //     }  
    //     console.log(args);
    //    return args.pop() + sum(...args);
    //     // return 5 + sum(1,2,3,4) = 15
    //     // return 4 + sum(1,2,3) = 10
    //     // return 3 + sum(1,2) = 6
    //     // return 2 + sum(1) = 3
    //     // return 1 + sum() = 1
    //     // return 0

        
    // }

    // console.log(sum(1,2,3,4,5));


    // function sum(...args){
    //     return args.length == 0 ? 0 : args.pop() + sum(...args);
    // }
    // console.log(sum(1,2,3,4,5));


    //递归打印倒三角
    // function star(num = 3){
    //     if(!num){
    //         return '';
    //     }
    //     //打印出num个* repeat重复的次数
    //     document.write('*'.repeat(num)+'<br/>');
    //     //打印一次少一个
    //     star(--num);
        
    // }
    // star(1000);

    //递归打印倒三角
    // function star(num){
    //      document.write('*'.repeat(num)+'<br>');num == 0 ? '':star(--num);
    // }
    // star(5);


    //使用递归算法修改课程点击数
    let lessons = [
        {
            title:"媒体响应式布局",
            click:89
        },
        {
            title:'FLEX弹性盒子模型',
            click:45
        },
        {
            title:'GRID格栅系统',
            click:19
        },
        {
            title:'盒子模型详解',
            click:29
        }
    ];

    // console.log(lessons);
    // function change(lessons,num,i=0){
    //     if(i == lessons.length){
    //         return lessons;
    //     }
    //     lessons[i].click += num;
    //     return change(lessons,num,++i);
    // }


    // console.table(change(lessons,10));
    //map的两种操作数据的形态   操作的是引用类型  所有直接会改变原来的数据   循环完成之后   就会得到最新的数组  然后直接返回当前数组
    //可以将赋值后的数据全部返回   最后给一个全新的变量   然后返回   结果是一样的

    function change(lessons,num){
        //map是用来遍历数组的
       let lessionss =  lessons.map(item => {
            item.click += num;
            return item;
        });
        return lessionss;
    }
    console.table(change(lessons,10));




</script>